最后更新时间:2019年6月17日
功能介绍
与二维类似,三维场景提供图形绘制功能,这也是GIS的基础功能之一,也是非常重要的一部分,可辅助其它功能实现,常辅助实现查询、编辑、分析等功能。三维场景支持的图形表现内容十分丰富,有基本几何图形,即线、圆、矩形、多边形等,以及文本、图片、地标、三维模型等。
功能接口
场景覆盖物(自定义图形)的相关类位于com.zondy.mapgis.android. graphic包中,主要类为Graphic3D、GraphicPoint3D、GraphicCircle3D、GraphicImage3D、GraphicText3D、GraphicPlaceMarker、GraphicModel、GraphicMultiPoint3D、GraphicPolygon3D、GraphicPolylin3D等。
在场景视图中叠加显示一个覆盖物,需先获取一个覆盖物图层(Grapihc3DsOverlay),然后将覆盖物对象通过addGraphic()加载到此图层中。
实现方法
各种图形覆盖物的加载方法基本一致,区别只在于创建的覆盖物对象类型不同。
(1)创建覆盖物对象:点、多点、线、区、圆、椭圆、模型、图片、文字、标注;
(2)获取绘图图层:从SceneView中获取默认绘图图层,或创建自定义图层;
(3)向绘图图层添加覆盖物对象:通过叠加层Grapihc3DsOverlay对象的addGraphic()接口加载。
移除场景视图中的覆盖物对象,可由自定义图形图层(Grapihc3DsOverlay)的removeGraphic()、removeGraphicByIndex()、removeAllGraphics()、removeGraphics()等接口实现。
//构造单点对象 GraphicPoint3D mGraphicPoint3D = new GraphicPoint3D(); mGraphicPoint3D.setPoint(new Dot3D(116.312845, 39.839309, 9000.00)); //位置 mGraphicPoint3D.setSize(20); //大小 mGraphicPoint3D.setColor(Color.RED); //颜色 //1-添加到场景视图默认的覆盖物图层中进行显示(常用方法) mSceneView.getDefaultGraphics3DOverlay().addGraphic(mGraphicPoint3D); //2-创建自定义覆盖物图层并添加覆盖物(便于分层管理) Graphic3DsOverlay graphic3DsOverlay=new Graphic3DsOverlay(); graphic3DsOverlay.addGraphic(mGraphicPoint3D); mSceneView.getGraphic3DsOverlays().add(graphic3DsOverlay); //将覆盖物图层加到场景视图的覆盖物图层列表中
//构造线对象 GraphicPolyline3D mGraphicPolyline3D = new GraphicPolyline3D(); //初始化线点序列对象 List<Dot3D> mdot3DsLine = new ArrayList<Dot3D>(); mdot3DsLine.add(new Dot3D(116.405419, 39.916927, 9000)); mdot3DsLine.add(new Dot3D(103.382843,1.098812, 90000.00)); mdot3DsLine.add(new Dot3D(116.405419, 39.916927, 9000)); //设置信息 mGraphicPolyline3D.setPoints(mdot3DsLine); //点序列 mGraphicPolyline3D.setColor(Color.argb(128, 255, 255, 0)); //颜色 mGraphicPolyline3D.setLineWidth(6); //线宽
//构造多边形对象 GraphicPolygon3D mGraphicPolgon3D = new GraphicPolygon3D(); //初始化多边形点序列对象 List<Dot3D> mdot3DsLine = new ArrayList<Dot3D>(); mdot3DsLine.add(new Dot3D(118.503816, 42.00238, 9000)); mdot3DsLine.add(new Dot3D(116.499216, 39.834152, 9000)); mdot3DsLine.add(new Dot3D(114.217508, 39.834152, 9000)); //设置信息 mGraphicPolgon3D.setPoints(mdot3DsLine); //点序列 mGraphicPolgon3D.setColor(Color.argb(128, 0, 0, 200)); //填充颜色 mGraphicPolgon3D.setBorderlineWidth(1); //边线宽 mGraphicPolgon3D.setBorderlineColor(Color.argb(128, 0, 0, 0)); //边线颜色 mGraphicPolgon3D.setExtrusionHeight(90000); //覆盖物伸出的高度
//构造圆对象 GraphicCircle3D mGraphicCircle3D = new GraphicCircle3D(); //设置信息 mGraphicCircle3D.setCenterPoint(new Dot3D(26.00, 23.71, 9000)); //中心点 mGraphicCircle3D.setRadius(500000); //半径 mGraphicCircle3D.setColor(Color.argb(128, 200, 0, 0)); //填充颜色 mGraphicCircle3D.setBorderlineColor(Color.argb(128, 0, 0, 0)); //边线颜色 mGraphicCircle3D.setBorderlineWidth(1); //边线宽
//构造椭圆对象 GraphicEllipse3D mGraphicEllipse3D = new GraphicEllipse3D(); //设置信息 mGraphicEllipse3D.setPoint(new Dot3D(103.382843,1.098812, 90000.00)); //中心点 mGraphicEllipse3D.setRadiusMinor(100000); //短半径 mGraphicEllipse3D.setRadiusMajor(300000); //长半径 mGraphicEllipse3D.setBorderlineWidth(1); //边线宽 mGraphicEllipse3D.setColor(Color.RED); //填充颜色
文本即文本标注,顾名思义,通过文本描述标注点的信息。
//创建覆盖物对象 GraphicText3D mGraphicText3D = new GraphicText3D(); mGraphicText3D.setPoint(new Dot3D(114.410142, 30.521057,9000)); //设置文本位置 mGraphicText3D.setText("武汉"); //设置文本内容 mGraphicText3D.setFontSize(30); //字体大小 mGraphicText3D.setColor(Color.YELLOW); //颜色
图片即图片的标记,也称图片标注,通过图标来展现标注点的信息。
//实例化图片GraphicImage3D对象 GraphicImage3D mGraphicImage3D = new GraphicImage3D(); //设置图片路径 mGraphicImage3D.setImagePath(android.os.Environment.getExternalStorageDirectory().getPath() + "/MapGIS Mobile 3D Sample/Resource/annotation.png"); //设置拐角 mGraphicImage3D.setCorners(new Dot(114.00, 30.00), new Dot(114.610142, 30.00), new Dot(114.00, 31.00), new Dot(114.610142, 31.00));
标注,即图文标注,是文本带图片的标记,通过文本结合图标来展现标注点的信息。
//实例化标注GraphicPlaceMarker对象 GraphicPlaceMarker mGraphicPlaceMarker = new GraphicPlaceMarker(); //设置标注图片 mGraphicPlaceMarker.setImagePath(android.os.Environment.getExternalStorageDirectory().getPath() + "/MapGIS Mobile 3D Sample/Resource/ico_result_location_green.png"); //设置标注文字内容 mGraphicPlaceMarker.setLabelText("北京"); //设置标注位置 mGraphicPlaceMarker.setPosition(new Dot3D(116.405419, 39.916927, 9000));
提供多种模型数据的展示。
//构造模型对象 GraphicModel mGraphicModel = new GraphicModel(); //设置信息 mGraphicModel.setModelPath(android.os.Environment.getExternalStorageDirectory().getPath() + "/MapGIS Mobile 3D Sample/Scene/Models/ive/xcgj.ive"); //设置模型资源的路径 mGraphicModel.setPoint(new Dot3D(114.00, 30.00, 10.00)); //设置模型显示的位置 mGraphicModel.setAngleAroundX(270); //设置模型显示的角度 mGraphicModel.setAltitudeMode(AltitudeMode.RELATIVETOTERRAIN); //设置高程模式(相对地形高程模式)
覆盖物的高程模式有如下三种类型:
高程模式字段 | 说明 |
---|---|
AltitudeMode.CLAMPTOTERRAIN | 贴地形模式 |
AltitudeMode.NONE | 绝对高程模式 |
AltitudeMode.RELATIVETOTERRAIN | 相对地形高程模式 |